package com.developpez.rpouiller.testsjunit4;

import org.junit.Assert;
import org.junit.Test;

/**
 * 
 * @author E105123P
 * Penser a tester les methodes diviser, soustraire et additionner
 */
public class TestSimple {

    /** 
     * test d'addition de 2 nombres 
     */
    @Test
    public void additionAvecDeuxNombres() {
        final long lAddition = Operations.additionner(10, 20);
        Assert.assertEquals(30, lAddition);
    }

    /** 
     * test d'addition de 5 nombres 
     */
    @Test
    public void additionAvecCinqNombres() {
        final long lAddition = Operations.additionner(256, 512, 1024, 2048, 4096);
        Assert.assertEquals(7936, lAddition);
    }
    
    /** 
     * test d'multiplication de 2 nombres 
     */
    @Test
    public void multiplicationAvecDeuxNombres() {
        final long lMultiplication = Operations.multiplier(10, 20);
        Assert.assertEquals(200, lMultiplication);
    }

    /** 
     * test d'addition de 5 nombres 
     */
    @Test
    public void multiplicationAvecCinqNombres() {
        final long lMultiplication = Operations.multiplier(2, 2, 2, 2, 2);
        Assert.assertEquals(32, lMultiplication);
    }
    
    /** 
     * test soustraction de 1 nombres 
     */
    @Test (expected=IllegalArgumentException.class)
    public void soustractionAvecUnNombre() {
        final long lSoustraction = (long) Operations.soustraire(20);
    }
    
    /** 
     * test soustraction de 2 nombres 
     */
    @Test
    public void soustractionAvecDeuxNombres() {
        final long lSoustraction = (long) Operations.soustraire(20, 10);
        Assert.assertEquals(10, lSoustraction);
    }
    
    /** 
     * test soustraction de 5 nombres 
     */
    @Test
    public void soustractionAvecCinqNombres() {
        final long lSoustraction = (long) Operations.soustraire(200, 10, 10, 10, 10);
        Assert.assertEquals(160, lSoustraction);
    }

    /** 
     * test de multiplication de 2 nombres 
     */
    @Test
    public void testmutiplicationAvecDeuxNombres() {
        final long lMultiplication = Operations.multiplier(10, 20);
        Assert.assertEquals(200, lMultiplication);
    }
 
    /** 
     * test de multiplication de 5 nombres 
     */  
    @Test
    public void testMutiplicationAvecCinqNombres() {
        final long lMultiplication = Operations.multiplier(256, 512, 1024, 2048, 4096);
        Assert.assertEquals(1125899906842624L, lMultiplication);
    }
    
    /** 
     * test division de 1 nombre 
     */
    @Test (expected=IllegalArgumentException.class)
    public void divisionAvecUnNombre() {
        final long lDivision = (long) Operations.diviser(20);
    }
    
    /** 
     * test division avec un zero 
     */
    @Test (expected=Exception.class)
    public void divisionAvecUnZero() {
        final long lDivision = (long) Operations.diviser(20,0);
    }
    
    /** 
     * test division de 2 nombres 
     */
    @Test
    public void divisionAvecDeuxNombre() {
        final long lDivision = (long) Operations.diviser(20,10);
        Assert.assertEquals(2, lDivision);
    }
    
    /** 
     * test division de 5 nombres 
     */
    @Test
    public void divisionAvecCinqNombre() {
        final long lDivision = (long) Operations.diviser(20,10, 2, 1, 1);
        Assert.assertEquals(1, lDivision);
    }
    
    /**
     * test de la methode pythagore avec exception
     */
    @Test (expected=IllegalArgumentException.class)
    public void testPythagore0()
    {
    	final Boolean[] lPythagore = Operations.pythagore(new long[][]{{3,4,5,9},{3,4,5}});
    }
    
    /**
     * test de la methode pythagore
     */
    @Test
    public void testPythagore1()
    {
    	final Boolean[] lPythagore = Operations.pythagore(new long[][]{{3,4,5},{3,4,5}});
    	Assert.assertEquals(new Boolean[]{true,true}, lPythagore);
    }
    
    /**
     * test de la methode pythagore
     */
    @Test
    public void testPythagore2()
    {
    	final Boolean[] lPythagore = Operations.pythagore(new long[][]{{3,4,6},{3,4,5}});
    	Assert.assertEquals(new Boolean[]{false,true}, lPythagore);
    }
}
